package com.qfedu.mesadmin.md.type.service.impl;

import com.qfedu.mes.entity.md.MdItemType;
import com.qfedu.mesadmin.md.item.service.ItemService;
import com.qfedu.mesadmin.md.type.dao.MdItemTypeDAO;
import com.qfedu.mesadmin.md.type.params.AddItemTypeParam;
import com.qfedu.mesadmin.md.type.service.MdItemTypeService;
import com.qfedu.mesadmin.md.type.vo.ItemTypeVO;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class MdItemTypeServiceImpl implements MdItemTypeService {

    @Resource
    private MdItemTypeDAO mdItemTypeDAO;
    // 一般跨模块时，不建议直接注入其他模块的dao层
    // private MdItemDAO mdItemDAO;

    // 跨模块时，建议注入其他模块的业务层
    @Resource
    private ItemService itemService;

    @Override
    public List<ItemTypeVO> listTypeTree() {
        return mdItemTypeDAO.selectTypeTree();
    }

    @Override
    public MdItemType itemInfo(Long id) {
        return mdItemTypeDAO.selectById(id);
    }

    @Override
    public void addItemType(AddItemTypeParam param) {
        // 处理类型编码，一般可以使用redis存储自增的编号
        // xxxxxxxxxx
        // 根据当前时间的时间戳，截取最后四位
        String s = String.valueOf(System.currentTimeMillis());
        s = s.substring(s.length() - 4);
        String code = "ITEM_TYPE_" + s;

        // 计算所有父分类的id的字符串
        MdItemType pType = mdItemTypeDAO.selectById(param.getParentTypeId());
        String ancestors = pType.getAncestors() + "," + param.getParentTypeId();

        MdItemType type = new MdItemType();
        BeanUtils.copyProperties(param, type);
        type.setItemTypeCode(code);
        type.setAncestors(ancestors);
        mdItemTypeDAO.insert(type);
    }

    @Override
    public void deleteType(Long id) {
        // 正常的逻辑，如果分类下有子分类，不能删除
        // 如果分类下有物料，分类也不能删除

        // 为了程序的效果，删除分类时，删除分类下对应的物料
        mdItemTypeDAO.deleteById(id);

        itemService.deleteItemByTypeId(id);
    }
}
